package com.liming.order.client;

import com.liming.common.pojo.dto.order.admin.OrderPageQuery;
import com.liming.common.pojo.dto.order.admin.RefundPageQuery;
import com.liming.common.pojo.vo.PageVO;
import com.liming.common.pojo.vo.dashboard.feign.FeignUserConsumeRankVO;
import com.liming.common.pojo.vo.order.OrderVO;
import com.liming.common.pojo.vo.order.openfeign.FeignOrderDetailVO;
import com.liming.common.pojo.vo.order.web.RefundOrderVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * @author liming
 * @date 2025/1/2
 */
@FeignClient(value = "order-service", contextId = "adminOrderClient", path = "/service/admin-order")
public interface AdminOrderClient {

    /**
     * 获取订单分页
     *
     * @param query 查询条件
     * @return 订单分页
     */
    @GetMapping
    PageVO<OrderVO> page(@SpringQueryMap OrderPageQuery query);

    /**
     * 详情 - 订单
     *
     * @param id 订单id
     * @return 详情
     */
    @GetMapping("/detail/{id}")
    FeignOrderDetailVO orderDetail(@PathVariable Long id);

    /**
     * 待处理订单（ 1-已支付, 2-待发货, 4-待自提）
     *
     * @return 待处理数量
     */
    @GetMapping("undeliveredOrderCount")
    Long undeliveredOrderCount();

    /**
     * 用户消费排行
     *
     * @param userIdAndNickname 用户id、昵称
     * @return 用户消费排行
     */
    @PostMapping("userConsumeRank")
    List<FeignUserConsumeRankVO> userConsumeRank(@RequestBody Map<Long, String> userIdAndNickname);

    /**
     * 完成 - 订单
     *
     * @param id 订单id
     * @return 完成结果
     */
    @PutMapping("/complete/{id}")
    Boolean complete(@PathVariable Long id);

    /**
     * 取消 - 订单
     *
     * @param id 订单id
     * @return 取消结果
     */
    @PutMapping("cancel/{id}")
    Boolean cancel(@PathVariable Long id);

    /**
     * 修改订单状态为 发货|自提 根据订单是否自提状态来判断
     *
     * @param id 订单ID
     * @return 订单发货或自提 结果
     */
    @PutMapping("deliverOrPickup/{id}")
    Boolean deliverOrPickup(@PathVariable Long id);
}
